package com.springboot.demo;

import java.io.File;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedHashMap;
import java.util.List;

import com.google.common.collect.Lists;
import com.springboot.demo.common.exception.BusinessException;
import com.springboot.demo.common.utils.WritableExcel;
import com.springboot.demo.entity.Person;
import com.springboot.demo.entity.Product;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;

import com.springboot.demo.common.utils.ReadableExcel;
import com.springboot.demo.entity.Person2;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;

@Slf4j
public class test {
	
	private static Logger log = LoggerFactory.getLogger(test.class);
	
	private static DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
	
	@Autowired
	private StringRedisTemplate stringRedisTemplate;
	
	/*@Autowired
	Jedis jedis;*/
	
	//@Test
	public void main1() throws Exception{
		stringRedisTemplate.opsForValue().set("aa", "111");
		//Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aa"));
		//stringRedisTemplate.opsForZSet().add("csb_order_e:"+userId+":message", mesId, dates);
		/*double nowDates = Double.valueOf(DateUtil.timeStamps().toString());	// 当前时间
		double maxDate = 0;
		// 从redis中根据用户的id查询新消息的id
		Set<String> value = stringRedisTemplate.opsForZSet().rangeByScore("chb:"+2+":message", maxDate, nowDates);
		System.out.println("----value--->"+value);*/
		
		String mesId = "202";
		
		// 删除
		stringRedisTemplate.opsForZSet().remove("csb_boss:17:message", mesId);
		
	}
	
	//@Test
	public void mains() throws Exception{
		/*@SuppressWarnings("resource")
		Jedis jedis = new Jedis();
		String randomKey = "b17d438f30694937b3a1e9dfde6c27d7";
		
		System.out.println("=============randomKeys--->"+randomKey);
		System.out.println("=============randomKeys--value--->"+jedis.get(randomKey));
		log.info("=============randomKeys--->{}",randomKey);*/
		
		/*User use = new User();
		use.setId(1);
		use.setUserName("屈原");
		use.setPassWord("123456");
		log.info("---use--->{}",use);*/
		
		
	}
	
	public static void main(String[] args) throws Throwable {
		
		/*List<User> users = Lists.newArrayList();
		
		// 创建动态 Bean 实例
		DynaBean dynaBean = new DynaBean(User.class);
		// 创建一个 Bean 的实例
		dynaBean.newBeanInstance();
		// 设置 Bean 属性的值
		dynaBean.setFieldValue("id", 1);
	    dynaBean.setFieldValue("userName", "李四");
	    dynaBean.setFieldValue("passWord", "1231432");
	    // 取出 Bean 对象
	    users.add((User) dynaBean.getBean());
	    
	    // 创建一个 Bean 的实例
 		dynaBean.newBeanInstance();
 		// 设置 Bean 属性的值
 		dynaBean.setFieldValue("id", 2);
 	    dynaBean.setFieldValue("userName", "王五");
 	    dynaBean.setFieldValue("passWord", "1231411");
 	    // 取出 Bean 对象
 	    users.add((User) dynaBean.getBean());
 	    log.info("---users--->{}",users);*/
		
		// =================================== excel导入 导出 ===================================
		
		// -------------------------- excle导出测试 start ------------------------------
		/*File excelFile = new File("src/test/resources/export_excel.xlsx");

	    List<Person> list = Lists.newArrayList();
	    for (int i = 1; i < 10; i++) {
	        list.add(new Person(i, "屈倬贤" + i, i % 2 == 0, format.parse("1990-04-0" + i)));
	    }

	    // 属性与 Excel 列的映射关系
	    LinkedHashMap<String, String> mapper = new LinkedHashMap<String, String>();
	    mapper.put("id", "编号");
	    mapper.put("name", "姓名");
	    mapper.put("local", "本地户口");
	    mapper.put("birthday", "出生日期");

	    // 创建一个可写的 Excel 对象
	    WritableExcel excel = new WritableExcel(list, mapper);

	    // 写出 Excel 文档文件
	    boolean success = excel.write(excelFile);

	    if (success) {
	    	log.info("--Excel 生成成功！-->{}",success);
	    }*/
		// -------------------------- excle 导出测试 end ------------------------------
		
		 
		// -------------------------- excel 导入测试 start ----------------------------
		File excelFile = new File("src/test/resources/test2.xlsx");
	    
	    // 创建一个可读的 Excel 对象
	    ReadableExcel excel = new ReadableExcel(excelFile);

		/*MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
		// 获取文件流
		MultipartFile file = multipartRequest.getFile("excelFile");
		if(file==null || file.isEmpty()){
			throw new BusinessException("10010","文件不存在");
		}
		InputStream in = file.getInputStream();
		ReadableExcel readableExcel = new ReadableExcel(in);*/
	    
	    // 解析 Excel 数据为 JavaBean 对象

		// 方式一： 解析语法1：["id", "name", "sex", "local", "birthday"] 从左至右依次对应 Excel 表格的列数据

	    /*List<Person2> persons = excel.asList(Person2.class, "id", "name", "sex", "local", "birthday");
	    for (Person2 person : persons) {
	        log.info("---insert--person--->{}",person);
	    }*/
		List<Product> pd = excel.asList(Product.class, "bookNum", "bookName", "price", "classifyCode", "cqFactoryCode", "gzFactoryCode");
		log.info("---pd--->{}",pd);
		for (Product product : pd) {
			log.info("---insert--pd--->{}",product);
		}

	    
	    /**
	     * 方式二：
	     * 解析语法2：["0:id", "2:name", "1:sex"] 只提取想要的列的数据（0 代表第 1 列）
		 * "2:name" 表示将 Excel 表格第 3 列的数据解析成 JavaBean 对象的 name 属性的值
		 * ["0:id", "2:name", "1:sex"] 等效于 ["id", "2:name", "1:sex"]，其余类似，可灵活提取表格数据
		 * 场景：
			某公司使用的短信供应商目前已有 3 家，在统计数据的时候，需要先在供应商短信系统导出短信
			消息的 Excel 文档然后统计相关信息，但是不同供应商导出的 Excel 模板文件格式不一致，因此衍生
			了这种解析 Excel 表格数据的处理方法。
			假设供应商 A 导出的手机号码在第 2 列，供应商 B 导出的手机号码在第 3 列，我们可以这样做：
			供应商 A 使用 "1:mobile"
			供应商 B 使用 "2:mobile"
			这样一来，我们只需要根据不同的供应商传整数值定向解析列的数据即可，这样可以适配多个不同
			的 Excel 模板，只要 2 行代码完成解析工作
	     * */
	    /*List<Person> persons = excel.asList(Person.class, "0:id", "2:name", "1:sex");
	    for (Person person : persons) {
	        log.info("---insert--person--->{}",person);
	    }*/
	    // -------------------------- excel 导入测试 end ------------------------------
	}

	@Test
	public void main2() throws Exception{
		Person p = Person.builder().id(1).name("张三").sex("男").local(true).build();
		Person2 p2 = new Person2();
		/**
		 *	package org.springframework.beans;中的
		 *  	BeanUtils.copyProperties(A,B);
		 * 		是A中的值付给B
		 *
		 * 	package org.apache.commons.beanutils;（常用）
		 *       BeanUtils.copyProperties(A,B);
		 *       是B中的值付给A
		 * */
		BeanUtils.copyProperties(p,p2);
		p2.setSex1(p.getSex());
		System.out.println("---"+p2);
	}
	
}
